package br.com.sgpv2.hibernate.cargo;

import java.util.List;

import br.com.sgpv2.controler.NegocioExeception;
import br.com.sgpv2.entity.cargos.CargoFuncao;
import br.com.sgpv2.entity.pessoa.Contrato;

public interface CargoRepository {
	
	/**
	 * Método que salva um cargo funcao no sistema.
	 */
	void salvar(CargoFuncao cargoFuncao);

	/**
	 * Método que busca um cargo funcao no sistema.
	 */
	CargoFuncao buscar(Integer pk) throws NegocioExeception;

	/**
	 * Método que altera um Cargo Funcao no sistema.
	 */
	void alterar(CargoFuncao cargoFuncao);

	/**
	 * Método que lista todos os Cargos Funcoes do sistema.
	 */
	List<CargoFuncao> listar();

	/**
	 * Método que exclui um Cargo Funcao do sistema.
	 */
	void excluir(CargoFuncao cargoFuncao);
	
	/**
	 * Método que retorna todos os contratos de um determinado cargo fun��o.
	 */
	List<Contrato> listarContratosPorDepartamento(int idCargo);

	/**
	 * Método que retorna o cargo fun��o pelo c�digo.
	 */
	CargoFuncao buscarCargoPorCodigo(String cargoFuncao);
	
	/**
	 * Método retorna todas os Cargos ordenadas pelo atributo informado.
	 * @param atributoOrder
	 * @return
	 */
	List<CargoFuncao> listarOrder(String atributoOrder);
	
	/**
	 * Método retorna os cargos que possuem a descricao informada.
	 * @param descricao
	 * @return
	 */
	List<CargoFuncao> consultarPorDescricao(String descricao);

}
